using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._LocationReferencingTools._Configuration._LRSEvent
{
    /// <summary>
    /// <para>Modify LRS Event</para>
    /// <para>Modifies properties of a linear referencing system (LRS) event.</para>
    /// <para>修改线性参照系统 （LRS） 事件的属性。</para>
    /// </summary>    
    [DisplayName("Modify LRS Event")]
    public class ModifyLRSEvent : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ModifyLRSEvent()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_feature_class">
        /// <para>LRS Event Feature Class</para>
        /// <para>The input feature class or feature layer for the event.</para>
        /// <para>事件的输入要素类或要素图层。</para>
        /// </param>
        public ModifyLRSEvent(object _in_feature_class)
        {
            this._in_feature_class = _in_feature_class;
        }
        public override string ToolboxName => "Location Referencing Tools";

        public override string ToolName => "Modify LRS Event";

        public override string CallName => "locref.ModifyLRSEvent";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_feature_class, _event_id_field, _route_id_field, _from_date_field, _to_date_field, _loc_error_field, _measure_field, _to_measure_field, _event_spans_routes.GetGPValue(), _to_route_id_field, _store_route_name.GetGPValue(), _route_name_field, _to_route_name_field, _out_feature_class];

        /// <summary>
        /// <para>LRS Event Feature Class</para>
        /// <para>The input feature class or feature layer for the event.</para>
        /// <para>事件的输入要素类或要素图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("LRS Event Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_feature_class { get; set; }


        /// <summary>
        /// <para>Event ID Field</para>
        /// <para>Name of the event ID field.</para>
        /// <para>事件 ID 字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Event ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _event_id_field { get; set; } = null;


        /// <summary>
        /// <para>Route ID Field</para>
        /// <para>Name of the route ID field.</para>
        /// <para>路由 ID 字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Route ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _route_id_field { get; set; } = null;


        /// <summary>
        /// <para>From Date Field</para>
        /// <para>Name of the from date field.</para>
        /// <para>“开始日期”字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("From Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _from_date_field { get; set; } = null;


        /// <summary>
        /// <para>To Date Field</para>
        /// <para>Name of the to date field.</para>
        /// <para>“截至日期”字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("To Date Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _to_date_field { get; set; } = null;


        /// <summary>
        /// <para>Location Error Field</para>
        /// <para>Name of the location error field.</para>
        /// <para>位置错误字段的名称。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Location Error Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _loc_error_field { get; set; } = null;


        /// <summary>
        /// <para>Measure Field</para>
        /// <para>Name of the measure field if it is a point event or from measure field if it is a line event.</para>
        /// <para>度量字段的名称（如果是点事件）或测量字段的名称（如果是线事件）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Measure Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _measure_field { get; set; } = null;


        /// <summary>
        /// <para>To Measure Field</para>
        /// <para>Name of the to measure field. Required only for line events.</para>
        /// <para>要测量字段的名称。仅对行事件是必需的。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("To Measure Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _to_measure_field { get; set; } = null;


        /// <summary>
        /// <para>Event Spans Routes</para>
        /// <para><xdoc>
        ///   <para>Determines if the event records will span routes.</para>
        ///   <bulletList>
        ///     <bullet_item>AS_IS—No change to the property. This is the default.</bullet_item><para/>
        ///     <bullet_item>NO_SPANS_ROUTES—The event records do not span routes. Applicable only for line events.</bullet_item><para/>
        ///     <bullet_item>SPANS_ROUTES— The event records may span routes. Applicable only for line events.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>确定事件记录是否跨越路由。</para>
        ///   <bulletList>
        ///     <bullet_item>AS_IS - 不对属性进行更改。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>NO_SPANS_ROUTES - 事件记录不跨越路径。仅适用于线路事件。</bullet_item><para/>
        ///     <bullet_item>SPANS_ROUTES— 事件记录可以跨越路由。仅适用于线路事件。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Event Spans Routes")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _event_spans_routes_value _event_spans_routes { get; set; } = _event_spans_routes_value._AS_IS;

        public enum _event_spans_routes_value
        {
            /// <summary>
            /// <para>As is</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("As is")]
            [GPEnumValue("AS_IS")]
            _AS_IS,

            /// <summary>
            /// <para>Do not span routes</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("Do not span routes")]
            [GPEnumValue("NO_SPANS_ROUTES")]
            _NO_SPANS_ROUTES,

            /// <summary>
            /// <para>Spans routes</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("Spans routes")]
            [GPEnumValue("SPANS_ROUTES")]
            _SPANS_ROUTES,

        }

        /// <summary>
        /// <para>To Route ID Field</para>
        /// <para>Name of the to route ID field. Required only if it is a line event and it spans routes.</para>
        /// <para>“到路由 ID”字段的名称。仅当它是线事件并且跨路由时才需要。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("To Route ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _to_route_id_field { get; set; } = null;


        /// <summary>
        /// <para>Store Route Name</para>
        /// <para><xdoc>
        ///   <para>Determines if the event records will store the route name.</para>
        ///   <bulletList>
        ///     <bullet_item>AS_IS—No change to the property. This is the default.</bullet_item><para/>
        ///     <bullet_item>STORE_ROUTE_NAME—Stores the route name with the event records.</bullet_item><para/>
        ///     <bullet_item>NO_STORE_ROUTE_NAME—Does not store the route name with the event records.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>确定事件记录是否存储路由名称。</para>
        ///   <bulletList>
        ///     <bullet_item>AS_IS - 不对属性进行更改。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>STORE_ROUTE_NAME - 存储带有事件记录的路由名称。</bullet_item><para/>
        ///     <bullet_item>NO_STORE_ROUTE_NAME - 不存储与事件记录一起存储路由名称。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Store Route Name")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _store_route_name_value _store_route_name { get; set; } = _store_route_name_value._AS_IS;

        public enum _store_route_name_value
        {
            /// <summary>
            /// <para>As is</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("As is")]
            [GPEnumValue("AS_IS")]
            _AS_IS,

            /// <summary>
            /// <para>Do not store route name</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("Do not store route name")]
            [GPEnumValue("NO_STORE_ROUTE_NAME")]
            _NO_STORE_ROUTE_NAME,

            /// <summary>
            /// <para>Store route name</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("Store route name")]
            [GPEnumValue("STORE_ROUTE_NAME")]
            _STORE_ROUTE_NAME,

        }

        /// <summary>
        /// <para>Route Name Field</para>
        /// <para>The route name field if it is a point event that does not span routes, or the from route name field if it is a line event that spans routes. Required if Store Route Name is enabled.</para>
        /// <para>如果是不跨越路径的点事件，则为路径名称字段，如果是跨路径的线事件，则为从路径名称字段。如果启用了存储路由名称，则为必需。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Route Name Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _route_name_field { get; set; } = null;


        /// <summary>
        /// <para>To Route Name Field</para>
        /// <para>Name of the to route name field. Required if it is a line event, Store Route Name is chosen, and it spans routes.</para>
        /// <para>“到路由名称”字段的名称。如果是线路事件，则为必填项，选择存储工艺路线名称，并跨越工艺路线。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("To Route Name Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _to_route_name_field { get; set; } = null;


        /// <summary>
        /// <para>Updated LRS Event Feature Class</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated LRS Event Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_feature_class { get; set; }


        public ModifyLRSEvent SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}